package cuiyt.juc.volatiletest;

import java.util.concurrent.TimeUnit;

/**
 * @author cyt
 * @create 2020-05-02 23:44
 */
public class demo01 {
    //  测试可见性
    // 定义一个变量值, 不使用 volatile 修饰该变量的话， 程序会进入四循环， 当前线程无法得到 变量 flag 被修改之后的值
    // volatile 能够保证可见性
    /**
     *
     */
    static volatile Integer flag = 0;

    public static void main(String[] args) {

        new Thread(() -> {
            while (flag == 0) {
                System.out.println("等待主线程刷新值");
            }
        }, "A").start();
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 在主线程中修改它， 判断在其他线程能否检测到它的变化。
        flag = 1;
        System.out.println("flag: " + flag);
    }
}
